package com.zhu.solution.arrayQuestion;

import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zhujiabao
 * @Date: 2021/12/08/10:28
 * @Description:
 */
/*
* 加一
给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。

最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外，这个整数不会以零开头。

 

示例 1：

输入：digits = [1,2,3]
输出：[1,2,4]
解释：输入数组表示数字 123。
* */


public class Solution_7 {

    public static void main(String[] args) {

//        int[] digits = {4,3,2,1};
        int[] digits = {1,9,9,9,9,9,9};
//        int[] out = new Solution_7().plusOne(digits);
        int[] out = new Solution_7().plusOne_2(digits);

        System.out.println("输出的数组： " + Arrays.toString(out));
    }


    public int[] plusOne(int[] digits) {
        if (digits == null)
            return null;
        if (digits.length == 0)
            return digits;

        int length = digits.length;
        int count9 = 0;
        for (int i = length-1 ;i>=0;i--){
            if (digits[i] != 9){
                digits[i] += 1;
                return digits;
            }
            count9++;
            digits[i] = 0;

            if (count9 == length){
                digits = addOneLength(length);
                return digits;
            }
        }
        return null;

    }
    /*如果全部为9，那么数组新增一位*/
    public int[] addOneLength(int length){
        int addLength = length+1;
        int[] outArray =  new int[addLength];
        outArray[0] = 1;
        for (int i = 1;i<addLength;i++)
            outArray[i] = 0;
        return outArray;
    }

    /*别人的解法*/
    public int[] plusOne_2(int[] digits) {
        int length = digits.length;
        for (int i = length - 1; i >= 0; i--) {
            if (digits[i] != 9) {
                //如果数组当前元素不等于9，直接加1
                //然后直接返回
                digits[i]++;
                return digits;
            } else {
                //如果数组当前元素等于9，那么加1之后
                //肯定会变为0，我们先让他变为0
                digits[i] = 0;
            }
        }
        //除非数组中的元素都是9，否则不会走到这一步，
        //如果数组的元素都是9，我们只需要把数组的长度
        //增加1，并且把数组的第一个元素置为1即可
        int temp[] = new int[length + 1];
        temp[0] = 1;
        return temp;
    }
}
